// Atenção incluir na Run Configuratios -> Arguments
// no campo Program arguments: localhost
// em VM arguments: -Djava.security.policy=rmi.policy


package cliente;

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.Scanner;

import servidor.Biblioteca;

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		int qtd,opcao = 0;
		String isbn, senha;
		long timeInicio=0;
		
		try {
			if( System.getSecurityManager() == null)
				System.setSecurityManager(new SecurityManager());
			
			Registry r = LocateRegistry.getRegistry(args[0]);
			Biblioteca livraria = (Biblioteca) r.lookup("biblioteca");
			
			printOpcoes();
			
			do {
				System.out.print("Opção : ");
				switch (opcao = getUmNumero(0)) {
					case 1:
						timeInicio = System.nanoTime();
						System.out.println( livraria.listaTodosISBN() );
						break;
					case 2:
						isbn = getISBN();
						timeInicio = System.nanoTime();
						System.out.println( livraria.descricaoDoLivro(isbn));
						break;
					case 3:
						isbn = getISBN();
						timeInicio = System.nanoTime();
						System.out.println( livraria.informacaoDoLivro(isbn));
						break;
					case 4:
						timeInicio = System.nanoTime();
						System.out.println( livraria.listaTodasInformacoes());
						break;
					case 5:
						isbn = getISBN();
						qtd = getUmNumero(1);
						senha = getSenha();
						timeInicio = System.nanoTime();
						System.out.println( livraria.alteraEstoque(isbn,qtd ,senha ) );
						break;
					case 6:
						isbn = getISBN();
						timeInicio = System.nanoTime();
						System.out.println( livraria.obterEstoque(isbn) );
						break;
					case 7:
						timeInicio = System.nanoTime();
						break;
					default:
						System.out.println(" ERROR: Escolha uma opção em 1 a 7!");
				}
				calculaTempo(opcao, timeInicio, System.nanoTime());
				
			} while (opcao != 7);
			
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}// fim do main
	
	private static void calculaTempo(int opcao, long inicio, long fim) {
		System.out.printf("Comando %d: %7.6f s\n", opcao, (fim-inicio)/1000000000.0);
	}

	private static void printOpcoes() {
		System.out.println("--------------------Livraria -------------------------------------");
		System.out.println("---------------Escolhar uma Opção Abaixo -------------------------");
		System.out.println("1: Listar todos os ISBNs com seus respectivos titulos;");
		System.out.println("2: Obter a descrição de um livro, dado o seu ISBN;");
		System.out.println("3: Listar todas as informações de um livro, dado o seu ISBN;");
		System.out.println("4: Listar todas as informações de todos os livros;");
		System.out.println("5: Alterar o estoque de um livro (necessário informar o ISBN);");
		System.out.println("6: Obter o estoque de um livro, dado o seu ISBN;");
		System.out.println("7: Sair.");
		System.out.println("------------------------------------------------------------------");
		
	}

	private static String getSenha() {
		Scanner leitor = new Scanner(System.in);
		System.out.print("Senha : ");
		return leitor.next();
	}

	private static String getISBN() {
		Scanner leitor = new Scanner(System.in);
		System.out.print("ISBN : ");
		return leitor.next();
	}

	private static int getUmNumero(int op) {
		int opcao;
		Scanner leitor = new Scanner(System.in);
		if (op == 1)
			System.out.println("Nova quantidade: ");
		opcao = leitor.nextInt();
		System.out.println("");
		return opcao;
	}


	

} // fim da classe
